package org.yoyo.classroom.mapper;


import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
import org.yoyo.classroom.domain.po.BookingOrder;

import java.time.LocalDateTime;
import java.time.YearMonth;
import java.util.List;

/**
 * 预约订单Mapper接口
 */
@Mapper
public interface BookingOrderMapper {

    /**
     * 根据ID查询预约订单
     * @param id 预约订单ID
     * @return 预约订单对象
     */
    BookingOrder selectById(@Param("id") Long id);

    /**
     * 查询所有预约订单
     * @return 预约订单列表
     */
    List<BookingOrder> selectAll();

    /**
     * 插入预约订单
     * @param bookingOrder 预约订单对象
     * @return 影响的行数
     */
    int insert(BookingOrder bookingOrder);

    /**
     * 更新预约订单
     * @param bookingOrder 预约订单对象
     * @return 影响的行数
     */
    int update(BookingOrder bookingOrder);

    /**
     * 删除预约订单（逻辑删除）
     * @param id 预约订单ID
     * @return 影响的行数
     */
    int delete(@Param("id") Long id);


    List<BookingOrder> getBookingOrders();

    int countUserMonthlyBookings(@Param("userId") Long userId, @Param("yearMonth") YearMonth yearMonth);

    BookingOrder findConflictingOrders(
            @Param("seatId") Long seatId,
            @Param("startDateTime") LocalDateTime startDateTime,
            @Param("endDateTime") LocalDateTime endDateTime);

    List<BookingOrder> getOrdersByUserId(@Param("userId") Long userId);

    /**
     * 根据条件查询用户订单
     * @param userId 用户ID
     * @param bookingDate 预约日期
     * @param status 订单状态
     * @return 订单列表
     */
    List<BookingOrder> selectByCondition(@Param("userId") Long userId,
                                         @Param("bookingDate") String bookingDate,
                                         @Param("status") Integer status);


}
